package cn.vehicle.mapper;

import cn.vehicle.domains.bo.QueryPermissionBo;
import cn.vehicle.domains.entity.SysPermissionEntity;
import java.util.List;

/**
 * 系统权限Mapper接口
 * 对应sys_permission表的CRUD操作，支持权限层级查询、条件筛选等
 */
public interface SysPermissionMapper {

    /**
     * 新增权限
     * @param permissionEntity 权限实体（包含权限名称、编码、类型等核心字段）
     * @return 影响行数（1：成功，0：失败）
     */
    int insertPermission(SysPermissionEntity permissionEntity);

    /**
     * 根据ID查询权限详情
     * @param id 权限ID
     * @return 权限实体（无数据则返回null）
     */
    SysPermissionEntity selectPermissionById(Long id);

    /**
     * 根据权限编码查询权限（用于编码唯一性校验）
     * @param permissionCode 权限编码（如"user:add"）
     * @return 权限实体（无数据则返回null）
     */
    SysPermissionEntity selectPermissionByCode(String permissionCode);

    /**
     * 条件查询权限列表（支持按名称、类型、父ID、状态等筛选）
     * @param queryPermissionBo 查询条件（非空字段作为筛选条件）
     * @return 符合条件的权限列表（无数据则返回空列表）
     */
    List<SysPermissionEntity> selectPermissionList(QueryPermissionBo queryPermissionBo);

    /**
     * 选择性更新权限（仅更新非空字段）
     * @param permissionEntity 权限实体（需包含id，其他字段非空则更新）
     * @return 影响行数（1：成功，0：失败或无变更）
     */
    int updatePermissionSelective(SysPermissionEntity permissionEntity);

    /**
     * 根据ID删除权限
     * @param id 权限ID
     * @return 影响行数（1：成功，0：失败）
     */
    int deletePermissionById(Long id);
}